/*
* leetcode LCR 091. 粉刷房子
*
给你一个 二进制 字符串 s 和一个整数 k。
如果一个 二进制字符串 满足以下任一条件，则认为该字符串满足 k 约束：
字符串中 0 的数量最多为 k。
字符串中 1 的数量最多为 k。
返回一个整数，表示 s 的所有满足 k 约束 的子字符串的数量。

示例 1：

输入：s = "10101", k = 1
输出：12
解释：

s 的所有子字符串中，除了 "1010"、"10101" 和 "0101" 外，其余子字符串都满足 k 约束。
/*
* */
import java.util.*;
class Solution {
    public int countKConstraintSubstrings(String s, int k) {
        char[] cs=s.toCharArray();
        int n=s.length(),one=0,zero=0,l=0,r=0,count=0;
        for(l=0,r=0;r<n;r++){
            if(cs[r]=='0')zero++;
            else one++;
            while(one>k&&zero>k&&l<r){
                if(cs[l]=='0')zero--;
                else one--;
                l++;
            }
            count+=r-l+1;
        }
        return count;
    }
}